<?php
namespace app\common\message;
/**
 * Created by PhpStorm.
 * User: HuangLuSen
 * Date: 2017/5/11
 * Time: 10:09
 */
abstract class Message
{
    public $send_type_obj;//发送方式的对象
    public $datas;//要发送的消息

    public function __construct($send_type_obj,$data)
    {
        $this->send_type_obj = $send_type_obj;
        $this->datas          = $data;
    }

    /**
     * 抽象类 不同的消息来重写这个方法 一得到不同的消息数据格式
     * @return mixed
     */
    abstract public function combin_Data();

    /**
     * 桥接外部对象 引用外部对象，push到相应的队列
     * @param $data
     */
    public function push_to_queue($data)
    {
        if($this->send_type_obj instanceof SendType){
            $this->send_type_obj->push_to_queue($data);
        }
    }
    /**
     * 桥接外部对象 引用外部对象，send消息到相应的客户
     * @param $data
     */
    public function send_to_any($data)
    {
        if($this->send_type_obj instanceof SendType){
           return $this->send_type_obj->send_to_any($data);
        }
    }

    /**
     *完成发送到队列
     */
    public function send()
    {
        $data = $this->combin_Data();
        $this->push_to_queue($data);
    }

    /**
     *完成发送到客户信息
     */
    public function sendMessage()
    {
        return $this->send_to_any($this->combin_Data());
    }
}